#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QDebug>
#include <QShortcut>
#include <wizard.h>



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 1.创建菜单栏
    // menuBar: 如果菜单栏不存在则创建，如果存在则获取
    // 与我们是否自动生成代码有关
    QMenuBar* menubar = menuBar();
    // 将菜单栏设置到窗口中
    setMenuBar(menubar);

    // 2.1 创建菜单 - 文件
    // 在Qt框架中，tr 是一个宏，用于国际化（i18n）和本地化（l10n）字符串。
    // 当你想要使你的应用程序支持多种语言时，tr 宏就非常有用。
    QMenu* m_file = new QMenu(tr("文件 (&F)"));
    // 将菜单添加进菜单栏中
    menubar->addMenu(m_file);

    // 3.1 文件菜单下添加 菜单项-创建项目
    QAction* act_pro = new QAction(tr("创建项目"));
    act_pro->setIcon(QIcon(":/QIcon/icon_act_pro.png"));
    act_pro->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N));
    m_file->addAction(act_pro);

    QAction* act_open = new QAction(tr("开打项目"));
    // TODO 添加QIcon
    act_open->setIcon(QIcon(":/QIcon/openpro.png"));
    act_open->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O));
    m_file->addAction(act_open);


    // 2.2 创建菜单 - 设置
    QMenu* m_set = new QMenu(tr("设置 (&S)"));
    menubar->addMenu(m_set);

    // 3.2 设置菜单下添加 菜单项-播放音乐
    QAction* act_music = new QAction(tr("音乐"));
    act_music->setIcon(QIcon(":/QIcon/icon_act_music.png"));
    act_music->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M));
    m_set->addAction(act_music);

    //添加对象树
    _protree = new ProTree();
    ui->pro_layout->addWidget(_protree,0);

    // 关联信号槽
    // 点击菜单项会发出triggered信号
    connect(act_pro,&QAction::triggered,this,&MainWindow::SlotHandlerActPro);
    connect(act_music,&QAction::triggered,this,&MainWindow::SlotHandlerActMusic);
}

void MainWindow::SlotHandlerActPro()
{
    qDebug() << "点击 创建项目";
    // TODO
    // 创建向导类，类似创建Qt时显示的那些框框
    // 创建向导类 如果使用new 来创建向导类
    // 这个向导类挂在了 对象树上一定程度上是内存泄漏，我们只需要只用一次即可
    // 直接栈上定义变量即可
//    Wizard* wizard = new Wizard(this);
    // 需要指名父亲控件
    Wizard wizard(this);
    // 设置向导窗口标题
    wizard.setWindowTitle("创建项目");
    // 获取第一页
    QWizardPage* page_1 = wizard.page(0);
    // 设置第一页的窗口标题
    page_1->setTitle("设置项目配置");

    // 连接信号槽 todo
    // 要让ProTree捕获该信号，用获取到的name,path来创建对象树
    connect(&wizard,&Wizard::SigSendMsg,dynamic_cast<ProTree*>(_protree),&ProTree::SlotAddHeaderToProTree);
    qDebug() << "connect";

    // 展示向导窗口
    wizard.show();
    // 向导窗口执行
    wizard.exec();

    // 断开所有信号
    disconnect(&wizard);

}


void MainWindow::SlotHandlerActMusic()
{
    qDebug() << "点击 音乐";
}


MainWindow::~MainWindow()
{
    delete ui;
}

